/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.inf.ufg.clinica.persistencia;

import br.inf.ufg.clinica.model.Exames;
import br.inf.ufg.clinica.model.Paciente;
import br.inf.ufg.clinica.model.Prontuario;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Gustavo
 */
public class ProntuariGravacao implements ServiceHelper<Prontuario> {

    private final String ARQUIVO = "prontuario.csv";
    private CSVToFile gerenciadorDeArquivo;

    public ProntuariGravacao() {
        gerenciadorDeArquivo = new CSVToFile(ARQUIVO);
    }

    @Override
    public boolean gravarObjeto(Prontuario prontuario) {
        if (!gerenciadorDeArquivo.contem(prontuario.getId())) {
            return gerenciadorDeArquivo.gravarLinha(toLine(prontuario));
        } else {
            return false;
        }
    }

    @Override
    public void gravarObjetos(List<Prontuario> prontuario) {
        for (Prontuario pro : prontuario) {
            this.gravarObjeto(pro);
        }
    }

    @Override
    public Prontuario getObjetoPorId(int id) {
        String linha = gerenciadorDeArquivo.getLinhaPorId(id);
        if (linha != null) {
            Prontuario resultado = getObject(linha);
            return resultado;
        } else {
            return null;
        }

    }

    @Override
    public ArrayList<Prontuario> getTodosObjetos() {
        List<String> listaObjetos = gerenciadorDeArquivo.getLinhas();
        ArrayList<Prontuario> resultado = new ArrayList<>();
        for (String entrada : listaObjetos) {
            Prontuario prontuario = getObject(entrada);
            resultado.add(prontuario);
        }
        return resultado;
    }

    @Override
    public boolean remove(Prontuario prontuario) {
        return gerenciadorDeArquivo.removerLinha(prontuario.getId());
    }

    private String toLine(Prontuario i) {
        StringBuilder sb = new StringBuilder();

        sb.append(i.getId());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getPaciente().getId());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getExame());
        sb.append(ServiceHelper.SEPARADOR);        
        sb.append(i.getObservacao());

        return sb.toString();
    }

    private Prontuario getObject(String line) {
        String[] prontuario = line.split(
                String.valueOf(ServiceHelper.SEPARADOR));

        int id = Integer.parseInt(prontuario[0]);
        PacienteGravacao pacienteBD = new PacienteGravacao();
            Paciente paciente = pacienteBD.getObjetoPorId(Integer.parseInt(prontuario[1]));
            
        Exames exame = Exames.valueOf(prontuario[2]);
        String observacao = prontuario[3];
                                                            
            Prontuario resultado = new Prontuario(id, paciente, exame, observacao);
        return resultado;
        
       

        
    }

    public void imprimeListaAgenda(ArrayList<Prontuario> prontuario) {

        System.out.println("LISTA DE AGENDAMENTOS: \n");
        for (Prontuario prontuario1 : prontuario) {
            
            System.out.println("ID: " + prontuario1.getId() + "\t Nome do paciente: " + 
            prontuario1.getPaciente().getNome() + "\t Exame: " + prontuario1.getExame()
                    + "\t Observacao: " + prontuario1.getObservacao() + "\n");
        }
        System.out.println("**************************************************\n");

    }

}
